/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fs.coordenador;

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Cliente extends Thread {

    private Socket socketCliente;
    private ObjectOutputStream saida;
    private ObjectInputStream entrada;
    private String nome = "";

    public Cliente(String nome) {
        this.nome = nome;
    }

    @Override
    public void run() {
        try {
            //Cria o socket para se comunicar com o servidor.
            socketCliente = new Socket("localhost", 2004);
            System.out.println(this.nome + "> conectado ao servidor (porta 2004).");

            //Obtém os fluxos de entrada e saída.
            saida = new ObjectOutputStream(socketCliente.getOutputStream());
            saida.flush();
            entrada = new ObjectInputStream(socketCliente.getInputStream());
            
            enviarMensagem("oi");
            
            boolean encerrar = false;
            
            while (!encerrar) {
                //Aguarda até que o servidor envie alguma resposta.
                entrada.read();
                Object obj = entrada.readObject();
                if (obj instanceof String) {
                    //Imprime a resposta do servidor
                    System.out.println(obj);
                    if(!obj.toString().equals("bye")){
                        Scanner sc = new Scanner(System.in);
                        String comando = sc.nextLine();
                        enviarMensagem(comando);
                    } else{
                        System.out.println("Desconectando...");
                        break;
                    }
                    
                }
            }

        } catch (IOException | ClassNotFoundException ex) {
            System.err.println("Erro: " + ex);
        } finally {
            //Fecha todas as conexões.
            try {
                entrada.close();
                saida.close();
                socketCliente.close();
                System.out.println(this.nome + "> conexão encerrada.");
            } catch (IOException ex) {
                System.err.println("Erro: " + ex);
            }
        }
    }

    /**
     * Envia uma mensagem para o servidor.
     *
     * @param msg Objeto a ser enviado.
     */
    void enviarMensagem(Object msg) {
        try {
            saida.writeObject(msg);
            saida.flush();
        } catch (IOException ex) {
            System.err.println("Erro ao enviar mensagem: " + ex);
        }
    }

    public static void main(String args[]) {
        Cliente c1 = new Cliente("Cliente");
        c1.start();
    }
}